import os
import json
import re
from typing import List

def generate_json_files_for_admin_codes(
    input_json_path: str,
    output_dir: str, 
    admin_codes: List[str] = None
) -> None:
    """
    根据给定的行政区代码列表，替换原始 JSON 文件中的行政区代码，并生成新的 JSON 文件。

    参数:
    input_json (str): 原始 JSON 文件的路径。
    output_dir (str): 输出文件夹的路径。
    admin_codes (List[str]): 行政区代码列表。默认是中国32省的行政代码。

    返回:
    None

    异常:
    FileNotFoundError: 如果输入的 JSON 文件不存在，会抛出此异常。
    """
    # 确保输出文件夹存在
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)
    if admin_codes is None:
        # 中国的32个省的行政区代码
        admin_codes = [
            "110000", "120000", "130000", "140000", "150000", "210000", "220000", "230000",
            "310000", "320000", "330000", "340000", "350000", "360000", "370000", "410000",
            "420000", "430000", "440000", "450000", "460000", "500000", "510000", "520000",
            "530000", "540000", "610000", "620000", "630000", "640000", "650000", "810000",
            "820000"
        ]
    # 读取原始 JSON 文件
    with open(input_json, 'r', encoding='utf-8') as f:
        data = json.load(f)

    # 定义正则表达式模式，匹配文件路径中的行政区代码 匹配文件路径中的6位数字
    pattern = re.compile(r'(\d{6})')

    # 替换行政区代码并生成新的 JSON 文件
    for code in admin_codes:
        # 替换 file_path 中的行政区代码
        new_file_path = pattern.sub(code, data['eco_tif']['file_path'])
        data['eco_tif']['file_path'] = new_file_path

        # 生成新的 JSON 文件名
        output_json = os.path.join(output_dir, f"gep_calc_para_{code}.json")

        # 写入新的 JSON 文件
        with open(output_json, 'w', encoding='utf-8') as f:
            json.dump(data, f, ensure_ascii=False, indent=4)

        print(f"生成新的 JSON 文件：{output_json}")


# 示例调用
if __name__ == '__main__':
    # 定义原始 JSON 文件路径和输出文件夹路径
    input_json = r"F:\code\dev\calc-gep-regulate-cqc\calc_v1\data\gep_calc_para_540000.json"
    output_path = r"F:\code\dev\calc-gep-regulate-cqc\calc_v1\data\para_json"

    # 调用函数生成新的 JSON 文件
    generate_json_files_for_admin_codes(input_json, output_path)
